package cn.wp.ewallet.wmps.service;

import cn.wp.common.core.dto.WpResult;
import cn.wp.ewallet.wmps.model.dto.FinaTotalInfoDto;
import cn.wp.ewallet.wmps.model.dto.PurchasedProdOrderRelDetailDto;
import cn.wp.ewallet.wmps.model.dto.PurchasedProdOrderRelDto;
import cn.wp.ewallet.wmps.model.dto.TtyStatInfoDto;
import cn.wp.ewallet.wmps.model.entity.ProdOrderRelDo;
import cn.wp.ewallet.wmps.model.entity.ReturnYieldInfoDo;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * 理财订单-业务逻辑层
 * Created by zhangyongli on 2020/01/08
 */
public interface ProdOrderRelService {

    /**
     * 查询账户冻结资产
     * @param accountId
     * @return
     */
    BigDecimal getFrozenAmount(String accountId);

    /**
     * 购买理财产品
     * @param finaProdId
     * @param amount
     * @param isAutoRenewal
     * @param moneyTypeId
     */
    WpResult purchaseFinaProd(String finaProdId, BigDecimal amount, String isAutoRenewal, String moneyTypeId);

    /**
     * 查询个人理财总额
     * @return
     */
    FinaTotalInfoDto getPersonalTotal();

    /**
     * 修改赎回方式
     * @param prodOrderId
     */
    void modifyRenewalStatus(String prodOrderId,String status);

    /**
     * 提前赎回理财产品
     * @param prodOrderId
     */
    WpResult earlRedemption(String prodOrderId, String finaProdId);

    TtyStatInfoDto getTtyStatInfo();

    /**
     * 生成返息周期表
     * @param finaProdCycle 理财周期
     * @param returnRateCycle 返息周期
     * @param dailyReturnAmount 每日返息额
     * @param effDate 生效日期
     * @param expDate 到期日期
     * @param prodOrderRelDo 理财订单实体
     * @return
     */
    void getReturnYieldInfoDo(BigDecimal finaProdCycle, int returnRateCycle, BigDecimal dailyReturnAmount, LocalDate effDate, LocalDate expDate, ProdOrderRelDo prodOrderRelDo);

    /**
     * 根据理财订单id查询订单详情
     * @param prodOrderRelId
     * @return
     */
    PurchasedProdOrderRelDetailDto getProdDetailInfoByOrderRelId(String prodOrderRelId);
}